package com.wxzz.elearing.course.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wxzz.elearing.course.dto.StudyPlanDto;
import com.wxzz.elearing.course.dto.StudyPlanInsDto;
import com.wxzz.elearing.course.dto.WxUserStudyPlanDto;
import com.wxzz.elearing.course.dto.WxUserStudyPlanInsDto;
import com.wxzz.elearing.course.entity.*;
import com.wxzz.elearning.common.vo.JgPageVo;
import com.wxzz.elearning.common.vo.ReturnVO;

import java.util.List;
import java.util.Map;

public interface IStudyPlanService extends IService<StudyPlan> {

    /**
     * 添加学习计划(后台)
     *
     * @param studyPlanInsDto
     * @return
     */
    ReturnVO saveStudyPlan(Long enterpriseId, StudyPlanInsDto studyPlanInsDto);

    /**
     * 删除学习计划
     * @param studyPlanById
     * @return
     */
    ReturnVO deleteStudyPlanById(Long studyPlanById);

    /**
     * 更新培训计划人数(后台)
     *
     * @return
     */
    ReturnVO updateStudyPlanFinish();

    /**
     * 学习计划列表(后台)
     *
     * @param enterpriseId
     * @param studyPlanDto
     * @return
     */
    ReturnVO<JgPageVo<List<StudyPlan>>> listStudyPlan(Long enterpriseId, StudyPlanDto studyPlanDto);

    /**
     * 学习计划列表(小程序)
     *
     * @param enterpriseId
     * @param studyPlanDto
     * @return
     */
    ReturnVO<JgPageVo<List<StudyPlan>>> wxListStudyPlan(Long wxUserId, Long enterpriseId, StudyPlanDto studyPlanDto);

    /**
     * 根据学习计划id查询对应课程
     *
     * @param studyPlanId
     * @return
     */
    ReturnVO<List<StudyPlanUnit>> listCurriculumByStudyPlanId(Long wxUserId, Long studyPlanId);

    /**
     * 根据学习计划id列出学习单元
     *
     * @param studyPlanId
     * @return
     */
    ReturnVO<List<StudyPlanUnit>> listStudyPlanUnitByStudyPlanId(Long studyPlanId);

    /**
     * 查询学习计划详情
     *
     * @param studyPlanId
     * @return
     */
    ReturnVO<StudyPlanInsDto> selectStudyPlanDetail(Long wxUserId,Long studyPlanId);

    /**
     * 根据学习计划id查询学习计划人员(后台)
     *
     * @param wxUserStudyPlanDto
     * @return
     */
    ReturnVO<JgPageVo<List<WxUserStudyPlan>>> selectWxUserStudyPlanByStudyPlanId(WxUserStudyPlanDto wxUserStudyPlanDto);

    /**
     * 分配学习计划人员
     *
     * @param wxUserStudyPlanInsDto
     * @return
     */
    ReturnVO saveWxUserStudyPlan(WxUserStudyPlanInsDto wxUserStudyPlanInsDto);

    /**
     * 查询学习计划绑定的用户(远程调用)
     *
     * @param wxUserStudyPlanId
     * @param wxUserIds
     * @return
     */
    ReturnVO<List<JSONObject>> selectWxUserStudyPlan(Long wxUserStudyPlanId, List<Long> wxUserIds);

    /**
     * 初始化聊天室
     *
     * @return
     */
    ReturnVO<Map> initIM(Long studyPlanId);

    /**
     * 新增或修改学习单元
     * @param studyPlanUnit
     * @return
     */
    //ReturnVO saveStudyPlanUnit(StudyPlanUnit studyPlanUnit);
}
